/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sisgraf.util;
import java.math.BigDecimal;
import sisgraf.model.Unidade;
import sisgraf.model.Cor;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.LockMode;
import sisgraf.model.Cliente;
import sisgraf.model.ItemOrcamento;
import sisgraf.model.Material;
import sisgraf.model.Orcamento;
import sisgraf.model.Pedido;
import sisgraf.model.ServicoItemOrcamento;
import sisgraf.model.Vendedor;

/**
 *
 * @author Jordan Guerra
 */
public class HibernateTeste {
    private static String teste;
    private static Session session;
    private static Transaction t;
    public static void main(String[] args) throws SQLException {
        Orcamento orcamento;
        ItemOrcamento itemOrcamento;
        int opcao=0;
        byte na;
        List<ItemOrcamento> item;
        List<ServicoItemOrcamento> servico;

        do {
          opcao=Integer.parseInt(javax.swing.JOptionPane.showInputDialog(null,
                "\n1-Unidade\n2-Orcamento\n3-Orcamento com Serviços\n4-Orcamento com itens de Serviços\n5-Altera Orçamento\n6-Altera com bloqueio\n7-Deleta com bloqueio\n8-Deleta sem bloqueio\nInforme Opcao:", teste, 0));
        } while (opcao <1 || opcao>8);
        session = null;
        session = HibernateUtil.getSessionFactory().openSession();
        t = session.beginTransaction();
        switch (opcao){
            case 1:
                Unidade unidade = new Unidade();
                unidade.setDescricao("teste util");
                salvaModelo(unidade);
            break;
            case 2:
                orcamento = new Orcamento();
                orcamento = setDadosOrcamento(orcamento);
                salvaModelo(orcamento);
            break;
            case 3:
                orcamento = new Orcamento();
                orcamento = setDadosOrcamento(orcamento);
                itemOrcamento = new ItemOrcamento();
                itemOrcamento = setDadosItemOrcamento(itemOrcamento);
                itemOrcamento.setOrcamento(orcamento);
                orcamento.setItemOrcamento(itemOrcamento);
                salvaModelo(orcamento);
            break;
            case 4:
                orcamento = new Orcamento();
                orcamento = setDadosOrcamento(orcamento);
                itemOrcamento = new ItemOrcamento();
                itemOrcamento = setDadosItemOrcamento(itemOrcamento);
                ServicoItemOrcamento servicoItemOrcamento = new ServicoItemOrcamento();
                Material material;
                material= (Material) session.get(Material.class, 1);
                servicoItemOrcamento.setMaterial(material);
                na = 3;
                servicoItemOrcamento.setNumeroAplicacoes(na);
                double paDb = Double.parseDouble("0.10");
                BigDecimal pa=BigDecimal.valueOf(paDb);
                servicoItemOrcamento.setPorcentagemAplicacao(pa);
                ServicoItemOrcamento servicoItemOrcamento2 = new ServicoItemOrcamento();
                servicoItemOrcamento2.setMaterial(material);
                na = 2;
                servicoItemOrcamento2.setNumeroAplicacoes(na);
                paDb = Double.parseDouble("0.20");
                pa=BigDecimal.valueOf(paDb);
                servicoItemOrcamento2.setPorcentagemAplicacao(pa);
                servicoItemOrcamento.setItemOrcamento(itemOrcamento);
                servicoItemOrcamento.setOrcamento(orcamento);
                itemOrcamento.setServicoItemOrcamento(servicoItemOrcamento);
                servicoItemOrcamento2.setItemOrcamento(itemOrcamento);
                servicoItemOrcamento2.setOrcamento(orcamento);
                itemOrcamento.setServicoItemOrcamento(servicoItemOrcamento2);
                itemOrcamento.setOrcamento(orcamento);
                orcamento.setItemOrcamento(itemOrcamento);
                itemOrcamento.setDescricao("2º servico");
                orcamento.setItemOrcamento(itemOrcamento);
                salvaModelo(orcamento);
                session = HibernateUtil.getSessionFactory().openSession();
                t = session.beginTransaction();
                Pedido pedido = new Pedido();
                pedido.setItemorcamento(itemOrcamento);
                pedido.setValor(new BigDecimal("120.10"));
                salvaModelo(pedido);
            break;
            case 5:
                orcamento = new Orcamento();
                session = HibernateUtil.getSessionFactory().openSession();
                t = session.beginTransaction();
                orcamento= (Orcamento) session.get(Orcamento.class, 10);
                orcamento.setDataEmissao("06/02/2011");
                item = new ArrayList(orcamento.getItemOrcamento());
                item.get(0).setDescricao("Alterado 06");
                servico = new ArrayList(item.get(0).getServicoItemOrcamento());
                na = 4;
                servico.get(0).setNumeroAplicacoes(na);
                session.update(orcamento);
                t.commit();
            break;
            case 6:
                orcamento = new Orcamento();
                session = HibernateUtil.getSessionFactory().openSession();
                t = session.beginTransaction();
                orcamento= (Orcamento) session.get(Orcamento.class, 10, LockMode.UPGRADE);
                orcamento.setDataEmissao("07/02/2011");
                item = new ArrayList(orcamento.getItemOrcamento());
                item.get(0).setDescricao("Alterado 07");
                servico = new ArrayList(item.get(0).getServicoItemOrcamento());
                na = 4;
                servico.get(0).setNumeroAplicacoes(na);
                session.update(orcamento);
                t.commit();
            break;
            case 7:
                orcamento = new Orcamento();
                session = HibernateUtil.getSessionFactory().openSession();
                t = session.beginTransaction();
                orcamento= (Orcamento) session.get(Orcamento.class, 10);
                orcamento.setDataEmissao("07/02/2011");
                item = new ArrayList(orcamento.getItemOrcamento());
                item.get(0).setDescricao("Alterado 07");
                servico = new ArrayList(item.get(0).getServicoItemOrcamento());
                na = 4;
                servico.get(0).setNumeroAplicacoes(na);
                session.delete(orcamento);

                t.commit();
            break;
            case 8:
                orcamento = new Orcamento();
                session = HibernateUtil.getSessionFactory().openSession();
                t = session.beginTransaction();
                orcamento= (Orcamento) session.get(Orcamento.class, 4, LockMode.UPGRADE);
                orcamento.setDataEmissao("07/02/2011");
                item = new ArrayList(orcamento.getItemOrcamento());
                item.get(0).setDescricao("Alterado 07");
                servico = new ArrayList(item.get(0).getServicoItemOrcamento());
                na = 4;
                servico.get(0).setNumeroAplicacoes(na);
                session.delete(orcamento);

                t.commit();
            break;
        }
    }
    private static Orcamento setDadosOrcamento(Orcamento orcamento){
        Session session = null;
        session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        orcamento.setDataEmissao("01/01/2011");
        orcamento.setDataEncerramento("02/01/2011");
        orcamento.setDataSolicitacao("02/01/2011");
        Cliente cliente;
        cliente= (Cliente) session.get(Cliente.class, 1);
        orcamento.setCliente(cliente);
        Vendedor vendedor;
        vendedor= (Vendedor) session.get(Vendedor.class, 2);
        orcamento.setVendedor(vendedor);
        return orcamento;
    }
    private static ItemOrcamento setDadosItemOrcamento(ItemOrcamento itemOrcamento){
        itemOrcamento.setDataAprovacao("03/01/2011");
        itemOrcamento.setDataCancelamento("04/01/2011");
        itemOrcamento.setDescricao("Teste Util");
        short c=10;
        itemOrcamento.setLargura(c);
        c=20;
        itemOrcamento.setComprimento(c);
        itemOrcamento.setPrazoEntrega("04/01/2011");
        itemOrcamento.setQuantidade(1000);
        return itemOrcamento;
    }
    private static void salvaModelo(Object modelo){
        try
        {
            session.save(modelo);
            t.commit();
            } catch (HibernateException ex) {
                // Log the exception.
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            } catch (RuntimeException ex) {
                // Log the exception.
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            } catch (Exception ex) {
                // Log the exception.
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            } catch (Throwable ex) {
                // Log the exception.
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);

        } finally
        {
            if (session != null){
                session.close();
            }
        }
    }
}
